oracle 使用listagg函数报 ORA

您所在的位置:网站首页 oracle concatenation oracle 使用listagg函数报 ORA

oracle 使用listagg函数报 ORA

#oracle 使用listagg函数报 ORA| 来源: 网络整理| 查看: 265

由于oracle 19c不能使用wm_concat函数,只能使用listagg进行列转行。 在使用时遇到如下错误 ORA-01489: result of string concatenation is too long

SELECT t.tablespace_name, listagg(t.table_name, ',') WITHIN GROUP(ORDER BY table_name) over(PARTITION BY tablespace_name) clause FROM user_tables t;

在这里插入图片描述 错误是由于oracle对字符串长度有限制,长度不能超过4000.超过4000以后需要转为clob类型。 解决办法使用oracle的另外一个函数xmlagg。

SELECT t.tablespace_name, xmlagg(xmlparse(content t.table_name || ',' wellformed) ORDER BY t.table_name).getclobval() FROM user_tables t GROUP BY t.tablespace_name;

查询结果 在这里插入图片描述 看到合并后的内容后面多了一个连接符。所以还可以使用rtrim函数去掉多余的连接符

SELECT t.tablespace_name, rtrim(xmlagg(xmlparse(content t.table_name || ',' wellformed) ORDER BY t.table_name).getclobval(), ',') FROM user_tables t GROUP BY t.tablespace_name;

增加rtrim函数后,连接内容不再有多余的连接符 在这里插入图片描述

但是使用xmlagg函数将内容转为clob后也会有个缺点,就是clob不能使用聚合函数,也不能进行group by 或者去重后。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3